package algo;
/**
* Classe appliquant l'etape d'echange
* @author Kevin Georgy
* @since 13.06.2007	
* @version 1.0
*/

public class SwapStep extends Step {
   
	/**
	* Construit l'etape d'echange
	* @param aQuickSort QuickSort que l'etape doit modifier
	*/	
	SwapStep(QuickSort aQuickSort) {
		super(aQuickSort);
	}
	
	/**
	* Applique l'etape d'echange
	* @return Etape suivante
	*/	
	Step apply() {
		
		//  Definition du text explicatif
		tutoText = "Echange de "+
			quickSort.state().array.get(quickSort.state().leftCursor)+
			" avec "+
			quickSort.state().array.get(quickSort.state().rightCursor)+". "+
			"Les curseurs avancent de 1 case.";
		
		// Echange des éléments
		Comparable swap = quickSort.state().array.get(quickSort.state().leftCursor);
		quickSort.state().array.set(quickSort.state().leftCursor, quickSort.state().array.get(quickSort.state().rightCursor));
		quickSort.state().array.set(quickSort.state().rightCursor, swap);
		quickSort.state().rightCursor--;
		quickSort.state().leftCursor++;
		
		// Definit la prochaine etape
		return quickSort.steps().advance();
	}
	
  	/**
	* Indique le nom de l'etape
  	* @return Nom de l'etape
	*/	
	public String stepName() {
		return "Etape d'\u00E9change";
	}

}
